home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 526-550 / disk_547 / mmbshift / includes / relmacros.i < prev   
Text File  |  1992-05-06  |  6KB  |  329 lines

  1. *»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  2. *»» Made for Hisoft Devpac 2.12 by Preben Nielsen
  3. *»»
  4. *»» 09-Aug-91: Made this header
  5. *»»
  6. *»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  7. *»» Some macros to help declare and use local and global stack
  8. *»» variables. Includes a few macros to help passing arguments
  9. *»» on stack (C style).
  10. *»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  11.  
  12.     IFND    REL_DEFINES
  13. REL_DEFINES    SET    1
  14.  
  15. * Syntax : dcByte name[,name[,name...]]
  16. * Purpose: Allocate one or more bytes on stack
  17. dcByte        MACRO
  18. dcSize        set        dcSize+1
  19. \1        =        -dcSize
  20.         IFNC        '\2',''
  21.         dcByte        \2,\3,\4,\5,\6,\7,\8
  22.         ENDC
  23.         ENDM
  24.  
  25. * Syntax : dcWord name[,name[,name...]]
  26. * Purpose: Allocate one or more words on stack
  27. dcWord        MACRO
  28.         dcAlign2
  29. dcSize        set        dcSize+2
  30. \1        =        -dcSize
  31.         IFNC        '\2',''
  32.         dcWord        \2,\3,\4,\5,\6,\7,\8
  33.         ENDC
  34.         ENDM
  35.  
  36. * Syntax : dcLong name[,name[,name...]]
  37. * Purpose: Allocate one or more long-words on stack
  38. dcLong        MACRO
  39.         dcAlign2
  40. dcSize        set        dcSize+4
  41. \1        =        -dcSize
  42.         IFNC        '\2',''
  43.         dcLong        \2,\3,\4,\5,\6,\7,\8
  44.         ENDC
  45.         ENDM
  46.  
  47. * Syntax : dcAPtr name[,name[,name...]]
  48. * Purpose: Allocate one or more pointers on stack
  49. dcAPtr        MACRO
  50.         dcLong        \1,\2,\3,\4,\5,\6,\7,\8
  51.         ENDM
  52.  
  53. * Syntax : dcArea name,size
  54. * Purpose: Allocate a number of bytes on the stack
  55. dcArea        MACRO
  56. dcSize        set        dcSize+\2
  57. \1        =        -dcSize
  58.         ENDM
  59.  
  60. * Syntax : dcAlias name[,name[,name...]]
  61. * Purpose: To assign one or more names to the same address
  62. dcAlias        MACRO
  63. \1        =        -dcSize
  64.         IFNC        '\2',''
  65.         dcAlias        \2,\3,\4,\5,\6,\7,\8
  66.         ENDC
  67.         ENDM
  68.  
  69. * Syntax : dcAlign2
  70. * Purpose: Align declaration address to a 2-byte boundary
  71. dcAlign2    MACRO
  72. dcSize        set        dcSize+(dcSize&1)
  73.         ENDM
  74.  
  75. * Syntax : dcDeclare A0|A1|A2|A3|A4|A5|A6
  76. * Purpose: To initiate declaration of local variables/storage
  77. dcDeclare    MACRO
  78. dcSize        set        0
  79.         IFC        '\1','A0'
  80. dcReg        set        0
  81.         ELSEIF
  82.         IFC        '\1','A1'
  83. dcReg        set        1
  84.         ELSEIF
  85.         IFC        '\1','A2'
  86. dcReg        set        2
  87.         ELSEIF
  88.         IFC        '\1','A3'
  89. dcReg        set        3
  90.         ELSEIF
  91.         IFC        '\1','A4'
  92. dcReg        set        4
  93.         ELSEIF
  94.         IFC        '\1','A5'
  95. dcReg        set        5
  96.         ELSEIF
  97.         IFC        '\1','A6'
  98. dcReg        set        6
  99.         ELSEIF
  100.         moveq        #1234,D0
  101.         ENDC
  102.         ENDC
  103.         ENDC
  104.         ENDC
  105.         ENDC
  106.         ENDC
  107.         ENDC
  108.         ENDM
  109.  
  110. * Syntax : dcEnd
  111. * Purpose: To end declaration of local variables/storage
  112. dcEnd        MACRO
  113.         dcAlign2
  114.         ENDM
  115.  
  116. * Syntax : dcAlloc
  117. * Purpose: To allocate stackspace for local variables
  118. dcAlloc        MACRO
  119.         IFEQ        dcReg
  120.         link        A0,#-dcSize
  121.         ELSEIF
  122.         IFEQ        dcReg-1
  123.         link        A1,#-dcSize
  124.         ELSEIF
  125.         IFEQ        dcReg-2
  126.         link        A2,#-dcSize
  127.         ELSEIF
  128.         IFEQ        dcReg-3
  129.         link        A3,#-dcSize
  130.         ELSEIF
  131.         IFEQ        dcReg-4
  132.         link        A4,#-dcSize
  133.         ELSEIF
  134.         IFEQ        dcReg-5
  135.         link        A5,#-dcSize
  136.         ELSEIF
  137.         IFEQ        dcReg-6
  138.         link        A6,#-dcSize
  139.         ELSEIF
  140.         moveq        #1234,D0
  141.         ENDC
  142.         ENDC
  143.         ENDC
  144.         ENDC
  145.         ENDC
  146.         ENDC
  147.         ENDC
  148.         ENDM
  149.  
  150. * Syntax : dcFree
  151. * Purpose: To De-allocate stackspace for local variables
  152. dcFree        MACRO
  153.         IFEQ        dcReg
  154.         unlk        A0
  155.         ELSEIF
  156.         IFEQ        dcReg-1
  157.         unlk        A1
  158.         ELSEIF
  159.         IFEQ        dcReg-2
  160.         unlk        A2
  161.         ELSEIF
  162.         IFEQ        dcReg-3
  163.         unlk        A3
  164.         ELSEIF
  165.         IFEQ        dcReg-4
  166.         unlk        A4
  167.         ELSEIF
  168.         IFEQ        dcReg-5
  169.         unlk        A5
  170.         ELSEIF
  171.         IFEQ        dcReg-6
  172.         unlk        A6
  173.         ELSEIF
  174.         moveq        #1234,D0
  175.         ENDC
  176.         ENDC
  177.         ENDC
  178.         ENDC
  179.         ENDC
  180.         ENDC
  181.         ENDC
  182.         ENDM
  183.  
  184. * Syntax : dcReset
  185. * Purpose: To set all local variables/storage to 0
  186. dcReset        MACRO
  187.         IFEQ        dcReg
  188.         movem.l        D0/A0,-(SP)
  189.         IFLE        dcSize-127
  190.         moveq        #dcSize-1,D0
  191.         ELSEIF
  192.         move.w        #dcSize-1,D0
  193.         ENDC
  194. rClr.\@        clr.b        -(A0)
  195.         dbf        D0,rClr.\@
  196.         movem.l        (SP)+,D0/A0
  197.         ELSEIF
  198.         IFEQ        dcReg-1
  199.         movem.l        D0/A1,-(SP)
  200.         IFLE        dcSize-127
  201.         moveq        #dcSize-1,D0
  202.         ELSEIF
  203.         move.w        #dcSize-1,D0
  204.         ENDC
  205. rClr.\@        clr.b        -(A1)
  206.         dbf        D0,rClr.\@
  207.         movem.l        (SP)+,D0/A1
  208.         ELSEIF
  209.         IFEQ        dcReg-2
  210.         movem.l        D0/A2,-(SP)
  211.         IFLE        dcSize-127
  212.         moveq        #dcSize-1,D0
  213.         ELSEIF
  214.         move.w        #dcSize-1,D0
  215.         ENDC
  216. rClr.\@        clr.b        -(A2)
  217.         dbf        D0,rClr.\@
  218.         movem.l        (SP)+,D0/A2
  219.         ELSEIF
  220.         IFEQ        dcReg-3
  221.         movem.l        D0/A3,-(SP)
  222.         IFLE        dcSize-127
  223.         moveq        #dcSize-1,D0
  224.         ELSEIF
  225.         move.w        #dcSize-1,D0
  226.         ENDC
  227. rClr.\@        clr.b        -(A3)
  228.         dbf        D0,rClr.\@
  229.         movem.l        (SP)+,D0/A3
  230.         ELSEIF
  231.         IFEQ        dcReg-4
  232.         movem.l        D0/A4,-(SP)
  233.         IFLE        dcSize-127
  234.         moveq        #dcSize-1,D0
  235.         ELSEIF
  236.         move.w        #dcSize-1,D0
  237.         ENDC
  238. rClr.\@        clr.b        -(A4)
  239.         dbf        D0,rClr.\@
  240.         movem.l        (SP)+,D0/A4
  241.         ELSEIF
  242.         IFEQ        dcReg-5
  243.         movem.l        D0/A5,-(SP)
  244.         IFLE        dcSize-127
  245.         moveq        #dcSize-1,D0
  246.         ELSEIF
  247.         move.w        #dcSize-1,D0
  248.         ENDC
  249. rClr.\@        clr.b        -(A5)
  250.         dbf        D0,rClr.\@
  251.         movem.l        (SP)+,D0/A5
  252.         ELSEIF
  253.         IFEQ        dcReg-6
  254.         movem.l        D0/A6,-(SP)
  255.         IFLE        dcSize-127
  256.         moveq        #dcSize-1,D0
  257.         ELSEIF
  258.         move.w        #dcSize-1,D0
  259.         ENDC
  260. rClr.\@        clr.b        -(A6)
  261.         dbf        D0,rClr.\@
  262.         movem.l        (SP)+,D0/A6
  263.         ELSEIF
  264.         moveq        #1234,D0
  265.         ENDC
  266.         ENDC
  267.         ENDC
  268.         ENDC
  269.         ENDC
  270.         ENDC
  271.         ENDC
  272.         ENDM
  273.  
  274. * Syntax : parByte name[,name[,name...]]
  275. * Purpose: Declare one or more bytes on the stack as parameters
  276. ParByte        MACRO
  277. \1        =        ParSize
  278. ParSize        set        ParSize+1
  279.         IFNC        '\2',''
  280.         ParByte        \2,\3,\4,\5,\6,\7,\8
  281.         ENDC
  282.         ENDM
  283.  
  284. * Syntax : parWord name[,name[,name...]]
  285. * Purpose: Declare one or more words on the stack as parameters
  286. ParWord        MACRO
  287. \1        =        ParSize
  288. ParSize        set        ParSize+2
  289.         IFNC        '\2',''
  290.         ParWord        \2,\3,\4,\5,\6,\7,\8
  291.         ENDC
  292.         ENDM
  293.  
  294. * Syntax : parLong name[,name[,name...]]
  295. * Purpose: Declare one or more long-words on the stack as parameters
  296. ParLong        MACRO
  297. \1        =        ParSize
  298. ParSize        set        ParSize+4
  299.         IFNC        '\2',''
  300.         ParLong        \2,\3,\4,\5,\6,\7,\8
  301.         ENDC
  302.         ENDM
  303.  
  304. * Syntax : parAPtr name[,name[,name...]]
  305. * Purpose: Declare one or more pointers on the stack as parameters
  306. ParAPtr        MACRO
  307.         ParLong        \1,\2,\3,\4,\5,\6,\7,\8
  308.         ENDM
  309.  
  310. * Syntax : parArea name,size
  311. * Purpose: Declare an area on the stack as a parameter
  312. ParArea        MACRO
  313. \1        =        ParSize
  314. ParSize        set        ParSize+\2
  315.         ENDM
  316.  
  317. * Syntax : parDeclare
  318. * Purpose: To initiate declaration of parameters
  319. ParDeclare    MACRO
  320. ParSize        set        8
  321.         ENDM
  322.  
  323. * Syntax : parEnd
  324. * Purpose: To end declaration of parameters
  325. ParEnd        MACRO
  326.         ENDM
  327.  
  328.     ENDC
  329.